# 02. Node.js์ npm
Assembled by GimunLee
# ๊ฐ์
Angular๋ ๊ฐ๋จํ ๋ช ๋ น์ด๋ก Angular ํ๋ก์ ํธ์ ์ค์บํด๋ฉ(scaffolding)์ ์์ฑ, ์คํ, ๋น๋ ํ ์ ์์ผ๋ฉฐ, ๋ค์ํ ๊ตฌ์ฑ์์๋ฅผ ์ ๋ณ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ ์ปค๋งจ๋ ๋ผ์ธ ์ธํฐํ์ด์ค์ธ Angular CLI๋ฅผ ์ ๊ณตํ๋ค. Angular CLI๋ Node.js 6.9.0, npm 3.0.0 ์ด์์ ํ์๋ก ํ๋ค.
# Node.js
# ๊ฐ์
Node.js๋ Chrome V8 ์๋ฐ์คํฌํํธ ์์ง์ผ๋ก ๋น๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ์ผ๋ก ์ฃผ๋ก ์๋ฒ ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ํ๋ซํผ ์ด๋ค.
Node.js๋ ๋ธ๋ผ์ฐ์ ์ธ๋ถ ํ๊ฒฝ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋ฉฐ ์ด์ ํ์ํ ๋ชจ๋, ํ์ผ ์์คํ , HTTP ๋ฑ ๋นํธ์ธ API๋ฅผ ์ ๊ณตํ๋ค.
ํ๋ก ํธ์๋์ ๋ฐฑ์๋์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๋ํ์ฑ(isomorphic)์ ๋ณ๋์ ์ธ์ด ํ์ต ์๊ฐ์ ๋จ์ถํด ์ฃผ๋ ์ฅ์ ์ด ์๋ค.
# ํน์ง
Node.js๋ ๋ ผ๋ธ๋กํน(non-blocking I/O)์ ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํ ๋์ ์์ฒญ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค. Node.js๋ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ ์ฒ๋ฆฌํ์ฌ ๋น๋ฒํ I/O๊ฐ ๋ฐ์ํ๋ SPA์ ์ ํฉํ๋ค. ํ์ง๋ง CPU ์ฌ์ฉ๋ฅ ์ด ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๊ถ์ฅํ์ง ์๋๋ค.
Node.js์ REPL(Read Eval Print Loop: ์ ๋ ฅ ์ํ ์ถ๋ ฅ ๋ฐ๋ณต)์ ๊ฐ์ํ๊ฒฝ์ผ๋ก ๊ฐ๋จํ ์ฝ๋๋ฅผ ์ง์ ์คํํด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด ๋ณผ ์ ์๋ค. ๋ํ Node.js๋ http ์๋ฒ ๋ชจ๋์ ๋ด์ฅํ๊ณ ์์ด์ ์ํ์น์ ๊ฐ์ ๋ณ๋์ ์น์๋ฒ๋ฅผ ์ค์นํ ํ์๊ฐ ์๋ค.
# npm
# ๊ฐ์
npm(node package manager)์ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง ๋งค๋์ ์ด๋ค. Node.js์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋์ ํจํค์งํํ์ฌ ๋ชจ์๋ ์ ์ฅ์ ์ญํ ๊ณผ ํจํค์ง ์ค์น ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ CLI๋ฅผ ์ ๊ณตํ๋ค. ์์ ์ด ์์ฑํ ํจํค์ง๋ฅผ ๊ณต๊ฐํ ์๋ ์๊ณ ํ์ํ ํจํค์ง๋ฅผ ๊ฒ์ํ์ฌ ์ฌ์ฌ์ฉํ ์๋ ์๋ค.
# package.json๊ณผ ์์กด์ฑ ๊ด๋ฆฌ
Node.js ํ๋ก์ ํธ์์๋ ๋ง์ ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ณ ํจํค์ง์ ๋ฒ์ ๋ ๋น๋ฒํ๊ฒ ์ ๋ฐ์ดํธ๋๋ฏ๋ก ํ๋ก์ ํธ๊ฐ ์์กดํ๊ณ ์๋ ํจํค์ง๋ฅผ ์ผ๊ด์ ์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค. npm์ package.json ํ์ผ์ ํตํด์ ํ๋ก์ ํธ ์ ๋ณด์ ํจํค์ง์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ค.
package.json์์ ๊ฐ์ฅ ์ค์ํ ํญ๋ชฉ์ name๊ณผ version์ ํจํค์ง์ ๊ณ ์ ์ฑ์ ํ๋จํ๋ฏ๋ก ์๋ตํ ์ ์๋ค.
npm install ๋ช ๋ น์ด์ --save ์ต์ ์ ์ฌ์ฉํ๋ฉด ํจํค์ง ์ค์น์ ํจ๊ป package.json์ dependencies์ ์ค์น๋ ํจํค์ง ์ด๋ฆ๊ณผ ๋ฒ์ ์ด ๊ธฐ๋ก๋๋ค. (๊ธฐ๋ณธ ์ต์ ์ผ๋ก ๋ณ๊ฒฝ๋์๋ค.)